package Git.Gitee.javalab.Lab10;

import java.text.*; // to use Decimal Format

/**
 * Demonstrates the BankAccount and derived classes
 */
public class AccountDriver {
    public static void main(String[] args) {
        double put_in = 500;
        double take_out = 1000;
        DecimalFormat myFormat;
        String money;
        String money_in;
        String money_out;
        boolean completed;
        // to get 2 decimals every time
        myFormat = new DecimalFormat("#.00");
        //to test the Checking Account class
        CheckingAccount myCheckingAccount =
                new CheckingAccount("Ben Franklin", 1000);
        System.out.println("Account Number "
                + myCheckingAccount.getAccountNumber() +
                " belonging to " + myCheckingAccount.getOwner());
        money = myFormat.format(myCheckingAccount.getBalance());
        System.out.println("Initial balance = $" + money);
        myCheckingAccount.deposit(put_in);
        money_in = myFormat.format(put_in);
        money = myFormat.format(myCheckingAccount.getBalance());
        System.out.println("After deposit of $" + money_in
                + ", balance = $" + money);
        completed = myCheckingAccount.withdraw(take_out);
        money_out = myFormat.format(take_out);
        money = myFormat.format(myCheckingAccount.getBalance());
        if (completed) {
            System.out.println("After withdrawal of $" + money_out
                    + ", balance = $" + money);
        } else {
            System.out.println("Insuffient funds to withdraw $"
                    + money_out + ", balance = $" + money);
        }
        System.out.println();
        //to test the savings account class
        SavingsAccount yourAccount =
                new SavingsAccount("William Shakespeare", 400);
        System.out.println("Account Number "
                + yourAccount.getAccountNumber() +
                " belonging to " + yourAccount.getOwner());
        money = myFormat.format(yourAccount.getBalance());
        System.out.println("Initial balance = $" + money);
        yourAccount.deposit(put_in);
        money_in = myFormat.format(put_in);
        money = myFormat.format(yourAccount.getBalance());
        System.out.println("After deposit of $" + money_in
                + ", balance = $" + money);
        completed = yourAccount.withdraw(take_out);
        money_out = myFormat.format(take_out);
        money = myFormat.format(yourAccount.getBalance());
        if (completed) {
            System.out.println("After withdrawal of $" + money_out
                    + ", balance = $" + money);
        } else {
            System.out.println("Insuffient funds to withdraw $"
                    + money_out + ", balance = $" + money);
        }
        yourAccount.postInterest();
        money = myFormat.format(yourAccount.getBalance());
        System.out.println("After monthly interest has been posted,"
                + "balance = $" + money);
        System.out.println();

        // to test the copy constructor of the savings account class
        SavingsAccount secondAccount =
                new SavingsAccount(yourAccount, 5);
        System.out.println("Account Number "
                + secondAccount.getAccountNumber() +
                " belonging to " + secondAccount.getOwner());
        money = myFormat.format(secondAccount.getBalance());
        System.out.println("Initial balance = $" + money);
        secondAccount.deposit(put_in);
        money_in = myFormat.format(put_in);
        money = myFormat.format(secondAccount.getBalance());
        System.out.println("After deposit of $" + money_in
                + ", balance = $" + money);
        secondAccount.withdraw(take_out);
        money_out = myFormat.format(take_out);
        money = myFormat.format(secondAccount.getBalance());
        if (completed) {
            System.out.println("After withdrawal of $" + money_out
                    + ", balance = $" + money);
        } else {
            System.out.println("Insuffient funds to withdraw $"
                    + money_out + ", balance = $" + money);
        }
        System.out.println();
        //to test to make sure new accounts are numbered correctly
        CheckingAccount yourCheckingAccount =
                new CheckingAccount("Isaac Newton", 5000);
        System.out.println("Account Number "
                + yourCheckingAccount.getAccountNumber()
                + " belonging to "
                + yourCheckingAccount.getOwner());
    }
}